/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tallerfinal.model;

import tallerfinal.util.distributions.Generator;

/**
 *
 * @author ricardo
 */
public abstract class InventoryModel {

    protected int A;
    protected int B;
    protected final int inventarioInicial;
    protected final int n;//a year in days
    protected final double unitaryCost;
    protected final double orderCost;
    protected final double holdCost;
    protected final double shortageCost;
    protected final Generator<?> demandGenerator;
    protected final Generator<?> elapsedTimeGenerator;
    protected final Generator<?> demandTimeGenerator;
    protected final String nameA;
    protected final String nameB;

    public InventoryModel(int A, int B, int n, double unitaryCost, double orderCost, double holdCost, double shortageCost, Generator<?> demandGenerator, Generator<?> elapsedTimeGenerator, Generator<?> demandTimeGenerator, String nameA, String nameB, int InventarioInicial) {
        this.A = A;
        this.B = B;
        this.n = n;
        this.unitaryCost = unitaryCost;
        this.orderCost = orderCost;
        this.holdCost = holdCost;
        this.shortageCost = shortageCost;
        this.demandGenerator = demandGenerator;
        this.elapsedTimeGenerator = elapsedTimeGenerator;
        this.demandTimeGenerator = demandTimeGenerator;
        this.nameA = nameA;
        this.nameB = nameB;
        this.inventarioInicial = InventarioInicial;
    }

    public abstract double costFunction();

    public int getA() {
        return A;
    }

    public void setA(int A) {
        this.A = A;
    }

    public int getB() {
        return B;
    }

    public void setB(int B) {
        this.B = B;
    }

    public int getN() {
        return n;
    }

    public double getUnitaryCost() {
        return unitaryCost;
    }

    public double getOrderCost() {
        return orderCost;
    }

    public double getHoldCost() {
        return holdCost;
    }

    public double getShortageCost() {
        return shortageCost;
    }

    public Generator<?> getDemandGenerator() {
        return demandGenerator;
    }

    public Generator<?> getElapsedTimeGenerator() {
        return elapsedTimeGenerator;
    }

    public Generator<?> getDemandTimeGenerator() {
        return demandTimeGenerator;
    }

    public String getNameA() {
        return nameA;
    }

    public String getNameB() {
        return nameB;
    }
}
